<?php
/**
 * Таблица пользователей - users
 */
class UserTable extends Table
{
    protected $_table_name  = 'users';
    protected $_primary_key = 'user_id';
    protected $_row_class   = 'User';

    /**
     * Возвращает хэш пароля с солью
     * @param $salt string
     * @param $password string
     * @return string
     */
    public static function getPasswordHash($salt, $password)
    {
        return md5($salt . $password);
    }

    /**
     * Аутентификация пользователя: ищет в таблице пользователя с
     * данным логином и паролем. Если находит - вовзращает пользователя
     * как экземпляр класса User. Если не находит - генерирует исключение
     * AuthenticationException.
     * @param $login string
     * @param $password string
     * @return User
     * @throws AuthenticationException
     */
    public function authenticate($login, $password)
    {
        $db = MysqliDB::getInstance();

        $password_hash = self::getPasswordHash($login, $password);

        $query = sprintf("SELECT
                              user_id
                          FROM
                              users
                          WHERE
                              login    = '%s' AND
                              password = '%s'",
                          $db->escape_string($login),
                          $db->escape_string($password_hash));
        $result = $db->query($query);
        if ($result && $result->num_rows) {
            return new User($result->fetch_object()->user_id);
        } else {
            throw new AuthenticationException();
        }
    }
}
